package swimv2.ejb.control;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.Remove;
import javax.ejb.Stateful;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import swimv2.ejb.entity.Capacita;
import swimv2.ejb.entity.Lavoro;
import swimv2.ejb.entity.Utente;
import swimv2.ejb.remote.GestioneAmiciRemote;
import swimv2.ejb.remote.RicercaLavoroRemote;
import swimv2.ejb.util.GestioneUtenti;

import javax.ejb.Remote;  

@Stateful(name="RicercaLavoro") 
@Remote(RicercaLavoroRemote.class)  
public class RicercaLavoro implements RicercaLavoroRemote  {
	@PersistenceContext(unitName="SWIMV2")
	private EntityManager entityManager;
	private List<Lavoro> lavoriTrovati;
	
	
	public RicercaLavoro()
	{
		
		
	}
	
	
	

	@Override
	public List<Lavoro> getLavoriTrovati()
	{
		return lavoriTrovati;
	}

	
	
	
	
	
	
	
	
	
	
	
	@Remove
	@Override
	public void fine()
	{
		lavoriTrovati = null;
		
	}

	
	
	
	
	
	@Override public void restringiLista(String testo)
	{
		List <Lavoro> lavori=new ArrayList<Lavoro>();
		for(Lavoro l:lavoriTrovati)
		{
			if(l.getDescrizioneEstesa().contains(testo))
				lavori.add(l);
		}
		lavoriTrovati = lavori;
		
	}



	@Override
	public void iniziaRicerca(String username,String testo,boolean traAmici)
	{

		Utente u = GestioneUtenti.cercaUtente(entityManager, username);
		
		String ricerca = "SELECT DISTINCT l FROM Lavoro l,Utente u WHERE l.stato='"+Lavoro.Stato.INOFFERTA.ordinal()+"'";
		ricerca += "AND l.datore!='"+username+"' ";
		ricerca += "AND u.username='"+username+"' ";
		ricerca += "AND u NOT MEMBER OF l.candidati ";
		ricerca += " AND l.descrizioneEstesa LIKE '%"+testo+"%'";
		ricerca += " AND (l.soloAmici=false OR (l.datore MEMBER OF u.amici))";

		
		
		Query query=entityManager.createQuery(ricerca); 
		List <Lavoro> lavoriTrovatis=(List<Lavoro>)query.getResultList(); 
		lavoriTrovati = new ArrayList<Lavoro>();
		
		for(Lavoro l:lavoriTrovatis)
		{
			if(u.getCapacita().containsAll(l.getRequisiti()))
				lavoriTrovati.add(l);
		}
		
		
	}
}
